package com.example.dsl

import android.content.IntentFilter
import org.junit.Test


/**
 * Domain Special Language 领域特定语言 比较成功的DSL语言有：JSON, gradle
 *
 *
 * @author zhouronghua
 * @time 2022/3/26 7:23 下午
 */
class HtmlDslTest {

    @Test
    fun testDSL() {
        // 目前：第一胎: View/GroupView  第二胎：Compose

    }

//    mainfest
//    {
//        pkg("com.joe.kotlin")
//        permission("")
//    }
}

class IntentFilter {
    class Sub {

    }


}

/**
 * 第二个中转站：持有Component
 */
class Component {
    fun activity(content: String, lambda: IntentFilter.() -> Unit): IntentFilter {
        return IntentFilter()
    }
}

class Manifest {
    /**
     * 包名称
     */
    fun pkg(content: String) {}

    fun permission(permission: String) {}

    fun application(action: Component.() -> Unit): Component {
        val component = Component()
        component.action()
        return component
    }
}

/**
 * 第一个节点manifest
 * infix: 中缀表达式的作用      "abc".to(123)   "abc" to 123   必须是成双成对的
 */
fun manifest(lambda: Manifest.() -> Unit): Manifest {
    val manifest = Manifest()
    manifest.lambda()
    return manifest
}

/**
 * 思路一： 一旦看到{}  这个属于 lambda体，我们就定义lambda规则
 * 思路二：{}里面有 button text  我们需要让此lambda持有一个this，此this直接拿到 text button
 */
fun layout(action: () -> Unit) {

}


